package com.kgcx.order.domain;

import com.kgcx.common.annotation.dict.Dict;
import com.kgcx.dbutils.annotation.SelectBetweenAnd;
import com.kgcx.dbutils.annotation.SelectIn;
import com.kgcx.dbutils.annotation.SelectLike;
import io.swagger.annotations.ApiModelProperty;
import lombok.Data;

import javax.persistence.Column;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.persistence.Transient;
import java.sql.Timestamp;

@Data
@Table(name = "t_order_order")
public class Order {
    /**
     * 订单号
     */
    @Id
    @Column(name = "order_no")
    @SelectLike
    private String orderNo;

    /**
     * 下单人ID
     */
    @Column(name = "placing_user_id")
    private Long placingUserId;

    /**
     * 下单人名字
     */
    @Column(name = "placing_user_name")
    private String placingUserName;

    /**
     * 下单人电话
     */
    @Column(name = "placing_user_phone")
    @SelectLike
    private String placingUserPhone;

    /**
     * 乘车人名字
     */
    @Column(name = "passenger_name")
    private String passengerName;

    /**
     * 乘车人电话
     */
    @Column(name = "passenger_phone")
    private String passengerPhone;

    /**
     * 是否自己乘车，1-自己，2-他人
     */
    @Column(name = "is_self")
    private Integer isSelf;

    /**
     * 司机ID
     */
    @Column(name = "driver_id")
    private Long driverId;

    /**
     * 司机姓名
     */
    @Column(name = "driver_name")
    private String driverName;

    /**
     * 司机电话
     */
    @Column(name = "driver_phone")
    @SelectLike
    private String driverPhone;

    /**
     * 车辆ID
     */
    @Column(name = "auto_id")
    private Long autoId;

    /**
     * 车牌号
     */
    @Column(name = "auto_no")
    @SelectLike
    private String autoNo;

    /**
     * 下单渠道，1-小程序，2-管理后台，3-iOS，4-安卓
     */
    @Column(name = "order_channel")
    private Integer orderChannel;

    /**
     * 计划出发地城市ID
     */
    @Column(name = "plan_orig_city_id")
    private Integer planOrigCityId;

    /**
     * 计划出发地
     */
    @Column(name = "plan_orig")
    private String planOrig;

    /**
     * 计划出发地经度
     */
    @Column(name = "plan_orig_lng")
    private String planOrigLng;

    /**
     * 计划出发地纬度
     */
    @Column(name = "plan_orig_lat")
    private String planOrigLat;

    /**
     * 计划目的地城市ID
     */
    @Column(name = "plan_dest_city_id")
    private Integer planDestCityId;

    /**
     * 计划目的地
     */
    @Column(name = "plan_dest")
    private String planDest;

    /**
     * 计划目的地经度
     */
    @Column(name = "plan_dest_lng")
    private String planDestLng;

    /**
     * 计划目的地纬度
     */
    @Column(name = "plan_dest_lat")
    private String planDestLat;

    /**
     * 预估行驶总里程（单位为米）
     */
    @Column(name = "plan_mileage")
    private Long planMileage;

    /**
     * 预估行驶时长（单位为分钟）
     */
    @Column(name = "plan_duration")
    private Integer planDuration;

    /**
     * 预估价格，单位为分
     */
    @Column(name = "plan_price")
    private Integer planPrice;

    /**
     * 实际出发地城市ID
     */
    @Column(name = "actual_orig_city_id")
    private Integer actualOrigCityId;

    /**
     * 实际出发地
     */
    @Column(name = "actual_orig")
    private String actualOrig;

    /**
     * 实际出发地经度
     */
    @Column(name = "actual_orig_lng")
    private String actualOrigLng;

    /**
     * 实际出发地纬度
     */
    @Column(name = "actual_orig_lat")
    private String actualOrigLat;

    /**
     * 实际目的地城市ID
     */
    @Column(name = "actual_dest_city_id")
    private Integer actualDestCityId;

    /**
     * 实际目的地
     */
    @Column(name = "actual_dest")
    private String actualDest;

    /**
     * 实际目的地经度
     */
    @Column(name = "actual_dest_lng")
    private String actualDestLng;

    /**
     * 实际目的地纬度
     */
    @Column(name = "actual_dest_lat")
    private String actualDestLat;

    /**
     * 实际行驶总里程（单位为米）
     */
    @Column(name = "drive_mile")
    private Integer driveMile;

    /**
     * 实际行驶时长（载客时间，单位为秒）
     */
    @Column(name = "drive_time")
    private Integer driveTime;

    /**
     * 实际价格，单位为分
     */
    @Column(name = "fact_price")
    private Integer factPrice;

    /**
     * 实际需支付，单位为分
     */
    @Column(name = "fact_final_price")
    private Integer factFinalPrice;

    /**
     * 实际已支付，单位为分
     */
    @Column(name = "fact_paied")
    private Integer factPaied;

    /**
     * 付款时间
     */
    @Column(name = "paied_time")
    private Timestamp paiedTime;

    /**
     * 到达时间
     */
    @Column(name = "dest_time")
    private Timestamp destTime;

    /**
     * 使用的优惠券ID
     */
    @Column(name = "coupon_id")
    private Integer couponId;

    /**
     * 司机录入的开始时里程数
     */
    @Column(name = "start_mile")
    private Integer startMile;

    /**
     * 司机录入的结束时里程数
     */
    @Column(name = "end_mile")
    private Integer endMile;

    /**
     * 订单类型，1-立即接机，2-立即接站，3-预约接机，4-预约接站，5-预约送机，6-预约送站，7-预约用车，8-立即用车，9-立即送机，10-立即送站
     */
    @Column(name = "order_type")
    private Integer orderType;

    /**
     * 预约用车类型，1-经济型，2-豪华型，3-商务七座
     */
    @Column(name = "book_model")
    private Integer bookModel;

    /**
     * 实际用车类型
     */
    private Integer model;

    /**
     * 订单状态，1-等待接单，2-预约成功，3-已派车，4-司机出发，5-司机到达出发地，6-乘客已上车，7-行程中，
     * 8-行程结束待计算价格，9-行程结束待付款，10-标注已付款（用于司机代付），
     * 11-已支付（确实已付款，来自支付渠道的返回结果），12-已评价，13-已取消，14-派车失败下单失败，15-运力不足下单失败,20-已关闭
     */
    @Column(name = "order_state")
    @SelectIn
    @ApiModelProperty(position = 1020, value = "订单状态，1-等待接单，2-预约成功，3-已派车，4-司机出发，5-司机到达出发地，6-乘客已上车，7-行程中，8-行程结束待计算价格，9-行程结束待付款，10-标注已付款（用于司机代付），11-已支付（确实已付款，来自支付渠道的返回结果），12-已评价，13-已取消，14-派车失败下单失败，15-运力不足下单失败,20-已关闭", readOnly = false, access = "GET", allowableValues = "1,2,3,4,5,6,7....", example = "1")
    private Integer orderState;

    /**
     * 支付方式，1-乘客支付，2-司机代付
     */
    @Column(name = "pay_type")
    private Integer payType;

    @Transient
    @Dict(type = "paymentType", fieldName = "payType")
    private String payTypeValue;

    /**
     * 支付渠道，1-微信，2-支付宝，3-银联，4-账户扣款，5-企业代扣，9-其他
     */
    @Column(name = "pay_channel")
    private Integer payChannel;

    @Transient
    @Dict(type = "payChannel", fieldName = "payChannel")
    private String payChannelValue;

    /**
     * 计划出发时间
     */
    @Column(name = "plan_depart_time")
    private Timestamp planDepartTime;

    /**
     * 实际出发时间
     */
    @Column(name = "dep_time")
    private Timestamp depTime;

    /**
     * 空驶里程
     */
    @Column(name = "wait_mile")
    private Integer waitMile;

    /**
     * 等待时间（单位为秒）
     */
    @Column(name = "wait_time")
    private Integer waitTime;

    /**
     * 运价类型（1-常规，2-一口价，3-套餐价）
     */
    @Column(name = "fare_type")
    private Integer fareType;

    /**
     * 取消时间
     */
    @Column(name = "cancel_time")
    private Timestamp cancelTime;

    /**
     * 取消类型, 1-乘客， 2-司机， 3-后台
     */
    @Column(name = "cancel_type")
    private Integer cancelType;

    /**
     * 取消原因
     */
    @Column(name = "cancel_reason")
    private String cancelReason;

    /**
     * 航班信息
     */
    @Column(name = "flight_info")
    private String flightInfo;

    /**
     * 记录创建者ID
     */
    @Column(name = "create_id")
    private Long createId;

    /**
     * 记录创建时间(下单时间)
     */
    @Column(name = "create_time")
    @SelectBetweenAnd
    private Timestamp createTime;

    /**
     * 记录更新者ID
     */
    @Column(name = "update_id")
    private Long updateId;

    /**
     * 记录更新时间
     */
    @Column(name = "update_time")
    private Timestamp updateTime;

    /**
     * 记录状态，101-启用，102-禁用，103-删除
     */
    private Integer status;
    /**
     * 备注
     */
    private String remark;

    /**
     * 机场ID
     */
    @Column(name = "airport_id")
    private Long airportId;
    /**
     * 高铁站ID
     */
    @Column(name = "station_id")
    private Long stationId;

    /**
     * 是否发短信
     */
    @Column(name = "is_notify")
    private Integer isNotify;
    /**
     * 下单port地址
     */
    @ApiModelProperty(value = "下单port地址", required = false, example = "127.0.0.1")
    private String ip;
    /**
     * 下单端口号
     */
    @ApiModelProperty(value = "下单端口号", required = false, example = "80")
    private String port;

    /**
     * 注册mac地址
     */
    @ApiModelProperty(value = "注册mac地址", required = false, example = "112312321323")
    private String mac;
    /**
     * 注册imei地址
     */
    @ApiModelProperty(value = "注册imei地址", required = false, example = "112312321323")
    private String imei;
    /**
     * 注册imsi地址
     */
    @ApiModelProperty(value = "注册imsi地址", required = false, example = "112312321323")
    private String imsi;

     /**
     * 标记代付时间
     */
    @Column(name = "mark_paid_time")
    private Timestamp markPaidTime;
}